<!-- XHTML 1.0 Strict -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<meta name="author" content="Rachid Touzani" />
<meta name="keywords" content=" css, dropdowns, dropdown menu, drop-down, menu, navigation, nav, horizontal, vertical left-to-right, vertical right-to-left, horizontal linear, horizontal upwards, cross browser, internet explorer, ie, firefox, safari, opera, browser, lwis" />
<meta name="description" content="Clean, standards-friendly, modular framework for dropdown menus" />
<link href="../css/dropdown.vertical.css" media="screen" rel="stylesheet" type="text/css" />
<link href="../css/default.ultimate.css" media="screen" rel="stylesheet" type="text/css" />

<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Solid and Structural Mechanics Demo 1</title>
<link rel="stylesheet" type="text/css" href="../doxygen.css" />
<link rel="stylesheet" type="text/css" href="../tabs.css"  />
</head>

<body bgcolor="#FFFFFF" link="#FF0000" vlink="#FF00FF" alink="#FF00FF">
<p align="center"><a href="../index.html"><img src="../im/ofeli.gif" width="150" border="0"></a></p>

<center>
  <div id="cse" style="width: 60%;">Loading</div>
  <script src="http://www.google.com/jsapi" type="text/javascript"></script>
  <script type="text/javascript"> 
     google.load('search', '1', {language : 'en', style : google.loader.themes.SHINY});
     google.setOnLoadCallback(function() {
        var customSearchOptions = {};  var customSearchControl = new google.search.CustomSearchControl(
        '012396140824982761142:-qrywxcfi_o', customSearchOptions);
        customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET);
        customSearchControl.draw('cse');
     }, true);
   </script>
   <style type="text/css">
     .gsc-control-cse {
     font-family: Verdana, sans-serif;
     border-color: #DAE0E5;
     background-color: #DAE0E5;
   }
   .gsc-control-cse .gsc-table-result { font-family: Verdana, sans-serif; }
   input.gsc-input { border-color: #B6BEC5; }
   input.gsc-search-button {
     border-color: #B6BEC5;
     background-color: #D0D1D4;
   }
   .gsc-tabHeader.gsc-tabhInactive {
     border-color: #999999;
     background-color: #EEEEEE;
   }
   .gsc-tabHeader.gsc-tabhActive {
     border-color: #999999;
     background-color: #999999;
   }
   .gsc-tabsArea { border-color: #999999; }
   .gsc-webResult.gsc-result,
   .gsc-results .gsc-imageResult {
     border-color: #FFFFFF;
     background-color: #FFFFFF;
   }
   .gsc-webResult.gsc-result:hover,
   .gsc-imageResult:hover {
     border-color: #D2D6DC;
     background-color: #EDEDED;
   }
   .gsc-webResult.gsc-result.gsc-promotion:hover {
     border-color: #D2D6DC;
     background-color: #EDEDED;
   }
   .gs-webResult.gs-result a.gs-title:link,
   .gs-webResult.gs-result a.gs-title:link b,
   .gs-imageResult a.gs-title:link,
   .gs-imageResult a.gs-title:link b { color: #0568CD; }
   .gs-webResult.gs-result a.gs-title:visited,
   .gs-webResult.gs-result a.gs-title:visited b,
   .gs-imageResult a.gs-title:visited,
   .gs-imageResult a.gs-title:visited b { color: #0568CD; }
   .gs-webResult.gs-result a.gs-title:hover,
   .gs-webResult.gs-result a.gs-title:hover b,
   .gs-imageResult a.gs-title:hover,
   .gs-imageResult a.gs-title:hover b { color: #0568CD; }
   .gs-webResult.gs-result a.gs-title:active,
   .gs-webResult.gs-result a.gs-title:active b,
   .gs-imageResult a.gs-title:active,
   .gs-imageResult a.gs-title:active b { color: #0568CD; }
   .gsc-cursor-page { color: #0568CD; }
   a.gsc-trailing-more-results:link { color: #0568CD; }
   .gs-webResult .gs-snippet,
   .gs-imageResult .gs-snippet,
   .gs-fileFormatType { color: #5F6A73; }
   .gs-webResult div.gs-visibleUrl,
   .gs-imageResult div.gs-visibleUrl { color: #5F6A73; }
   .gs-webResult div.gs-visibleUrl-short { color: #5F6A73; }
   .gs-webResult div.gs-visibleUrl-short { display: none; }
   .gs-webResult div.gs-visibleUrl-long { display: block; }
   .gs-promotion div.gs-visibleUrl-short { display: none; }
   .gs-promotion div.gs-visibleUrl-long { display: block; }
   .gsc-cursor-box { border-color: #FFFFFF; }
   .gsc-results .gsc-cursor-box .gsc-cursor-page {
      border-color: #999999;
      background-color: #FFFFFF;
      color: #0568CD;
   }
   .gsc-results .gsc-cursor-box .gsc-cursor-current-page {
      border-color: #999999;
      background-color: #999999;
      color: #0568CD;
   }
   .gsc-webResult.gsc-result.gsc-promotion {
      border-color: #D2D6DC;
      background-color: #D0D1D4;
   }
   .gsc-completion-title { color: #0568CD; }
   .gsc-completion-snippet { color: #5F6A73; }
   .gs-promotion a.gs-title:link,
   .gs-promotion a.gs-title:link *,
   .gs-promotion .gs-snippet a:link { color: #0066CC; }
   .gs-promotion a.gs-title:visited,
   .gs-promotion a.gs-title:visited *,
   .gs-promotion .gs-snippet a:visited { color: #0066CC; }
   .gs-promotion a.gs-title:hover,
   .gs-promotion a.gs-title:hover *,
   .gs-promotion .gs-snippet a:hover { color: #0066CC; }
   .gs-promotion a.gs-title:active,
   .gs-promotion a.gs-title:active *,
   .gs-promotion .gs-snippet a:active { color: #0066CC; }
   .gs-promotion .gs-snippet,
   .gs-promotion .gs-title .gs-promotion-title-right,
   .gs-promotion .gs-title .gs-promotion-title-right *  { color: #333333; }
   .gs-promotion .gs-visibleUrl,
   .gs-promotion .gs-visibleUrl-short { color: #5F6A73; }
   </style>
</center>
</p>
&nbsp;

<div id="mainmenu">
<div class="text">

 <div class="tabs">
   <ul class="tablist">
   <li><a href="../index.html"><span>Home</span></a>
   <li><a href="../overview.html"><span>Overview</span></a>
   <li><a href="../html/index.html"><span>Class Documentation</span></a>
   <li><a href="../fformats.html"><span>File Formats</span></a>
   <li><a href="../tutorial.html"><span>Tutorial</span></a>
   <li class="current"><a href="../demos.html"><span>Demo Codes</span></a>
 </div>

 </div>
 </div>

&nbsp;
<p>
<h2>Solid and Structural Mechanics Demo 1: A linear elasticity problem with planar deformations</h2>

<p><table border="2" cellpadding="2" cellspacing="0" >
<tr>
<td align="center" width="35"><a href="eigen.html"><img src="../im/backward.gif" border="0"></a></td>
<td align="center" width="35"><a href="../demos.html"><img src="../im/top.gif" border="0"></a></td>
<td align="center" width="35"><a href="lelas3d.html"><img src="../im/forward.gif" border="0"></a></td>
</tr>
</table></p>

<p>
<SPAN class=TEXT>
This code solves linearized elastostatics problems with planar deformations.
</SPAN>

<ul type=square>
<li><SPAN class=TEXT>We start by defining an instance of class <span class=VAR>
<a href="../html/classOFELI_1_1IPF.html">IPF</a></span> to deal with project data.
We extract useful information from this instance: An output flag to deal with output level
and a save flag to say if the solution is to be saved in file. We then construct the 
<span class=VAR><a href="../html/classOFELI_1_1Mesh.html">Mesh</a></span> and the 
<span class=VAR><a href="../html/classOFELI_1_1Prescription.html">Prescription</a></span> instances.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   IPF data("lelas2d - 1.1 ",argv[1]);
   int output_flag = data.getOutput();
   int save_flag = data.getSave();
   Mesh ms(data.getMeshFile());
   Prescription p(ms,data.getDataFile());
</font></pre>
</td></tr></table>
</SPAN></p>

<li><SPAN class=TEXT>
The linear system uses a symmetric matrix. For this, we
we use an instance of class <span class=VAR><a href="../html/classOFELI_1_1SkSMatrix.html">SkSMatrix&lt;double&gt;</a></span>.
Then we declare a vector that will contain the right-hand side and then
the solution:
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   SkSMatrix&lt;double&gt; A(ms);
   Vect&lt;double&gt; b(ms);

</font></pre>
</td></tr></table>
</SPAN></p>

<li><SPAN class=TEXT>
We can then declare boundary conditions and loads. This is done by using
class <span class=VAR><a href="../html/classOFELI_1_1Prescription.html">Prescription</a></span>. Dirichlet boundary conditions are stored in vector <span class=VAR>bc</span>, 
body forces (ditributed loads) are in vector <span class=VAR>body_f</span>
and boundary forces (tractions or pressures on boundary) are in vector <span class=VAR>bound_f</span>.
Note that we have chosen to store boundary forces nodewise. All these vectors can
then by initialized from data as read in class <span class=VAR><a href="../html/classOFELI_1_1Prescription.html">Prescription</a></span>.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   Vect&lt;double&gt; bc(ms);
   p.get(BOUNDARY_CONDITION,bc,0);
   Vect&lt;double&gt; body_f(ms);
   p.get(BODY_FORCE,body_f);
   Vect&lt;double&gt; bound_f(ms);
   p.get(TRACTION,bound_f,0);
</font></pre>
</td></tr></table>
</SPAN></p>

<li><SPAN class=TEXT>The global matrix and right-hand side are, as usual, filled
by looping over elements. For each element, an instance of class 
<span class=VAR><a href="../html/classOFELI_1_1Elas2DQ4.html">Elas2DQ4</a></span>
is considered. This class deals with quadrilateral elements. Deviatoric and dilatational
terms are constructed separately. The other member functions have already been considered
in previous lessons.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   MeshElements(ms) {
      Elas2DQ4 eq(theElement);
      eq.Deviator();
      eq.Dilatation();
      eq.BodyRHS(Vect&lt;double&gt;(theElement,body_f));
      eq.ElementAssembly(A);
      eq.ElementAssembly(b);
   }

</font></pre>
</td></tr></table>
</SPAN></p>

<li><SPAN class=TEXT>Since we want to take account for boundary forces, we have
to loop over sides (here edges) and construct element loads. This has also been 
considered in previous lessons.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   MeshSides(ms) {
      Elas2DQ4 eq(theSide);
      eq.BoundaryRHS(Vect&lt;double&gt;(theSide,bound_f));
      eq.SideAssembly(b);
   }
</font></pre>
</td></tr></table>
</SPAN></p>

<li><SPAN class=TEXT>We can now prescribe boundary conditions by penalty method
and solve the resulting linear system by factorization and backsubstitution.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   A.Prescribe(b,bc);
   A.solve(b);
</font></pre>
</td></tr></table>
</SPAN></p>

<li type=square><SPAN class=TEXT>We can save the resulting displacement vector
for plotting or any other purpose. For this, the class
<span class=VAR><a href="../html/classOFELI_1_1IOField.html">IOField</a></span>
is used.<br>
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   if (save_flag) {
      IOField pl_file(data.getPlotFile(),IOField::OUT);
      pl_file.put(b);
   }
</font></pre>
</td></tr></table>
</SPAN></p>

<li><SPAN class=TEXT>Let us illustrate how to do some postprocessing. We 
want here to compute principal and Von Mises stresses. For this, we have to use the
member function <span class=VAR>Stress</span>. The element principal stresses are
stored in the instance <span class=VAR>ste</span> of class
<span class=VAR><a href="../html/classOFELI_1_1LocalVect.html">LocalVect&lt;double,3&gt;</a></span>
while an
<span class=VAR><a href="../html/classOFELI_1_1Vect.html">Vect&lt;double&gt;</a></span>
instance will contain elementwise Von Mises stresses.
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>   Vect&lt;double&gt; st(ms,"Principal Stress",0.0,3,ELEMENT_FIELD);
   Vect&lt;double&gt; vm(ms,"Von-Mises Stress",0.0,3,ELEMENT_FIELD);
   MeshElements(ms) {
      LocalVect&lt;double,3&gt; ste;
      Elas2DQ4 eq(theElement,b);
      eq.Stress(ste,vm(theElement->getLabel()));
      st(theElementLabel,1) = ste(1);
      st(theElementLabel,2) = ste(2);
      st(theElementLabel,3) = ste(3);
   }
</font></pre>
</td></tr></table>
</SPAN>
</ul></p>

&nbsp;&nbsp;
<h2>An example</h2>

<SPAN class=TEXT>
Let us run this program with the data presented in the following project file:
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;
&lt;OFELI_File&gt;
&lt;info&gt;
   &lt;title&gt;&lt;/title&gt;
   &lt;date&gt;&lt;/date&gt;
   &lt;author&gt;&lt;/author&gt;
&lt;/info&gt;
&lt;Project name="beam"&gt;
   &lt;verbose&gt;1&lt;/verbose&gt;
   &lt;output&gt;1&lt;/output&gt;
   &lt;save&gt;1&lt;/save&gt;
   &lt;plot&gt;1&lt;/plot&gt;
   &lt;init&gt;1&lt;/init&gt;
   &lt;mesh_file&gt;beam.m&lt;/mesh_file&gt;
   &lt;plot_file&gt;beam.d&lt;/plot_file&gt;
   &lt;prescription_file&gt;beam.pr&lt;/prescription_file&gt;
&lt;/Project&gt;
&lt;/OFELI_File&gt;</font></pre>
</td></tr></table></p>

<p>The only thing that may differ from other seen project files is that
prescription data is given in a separate file: <span class=VAR>beam.pr</span>.
Let us give this one:
<p><table bgcolor="#e0f8f7" border="1" frame=box rules=none width=700>
<tr><td>
<pre><font color="blue" size=3>&lt;?xml version="1.0" encoding="ISO-8859-1" ?&gt;
&lt;OFELI_File&gt;
&lt;info&gt;
   &lt;title&gt;&lt;/title&gt;
   &lt;date&gt;&lt;/date&gt;
   &lt;author&gt;&lt;/author&gt;
&lt;/info&gt;
&lt;Prescription&gt;
   &lt;BoundaryCondition code="1"&gt;0.0&lt;/BoundaryCondition&gt;
   &lt;Traction code="1" dof="2"&gt;-1000.0&lt;/Traction&gt;
&lt;/Prescription&gt;
&lt;/OFELI_File&gt;</font></pre>
</td></tr></table></p>

<p>
Clearly, we have prescribed by this file a (Dirichlet) boundary condition that
enforces a value of <span class=TT>0.0</span> for degrees of freedom with code 
<span class=TT>1</span>. In addition, we have prescribed a traction of value
<span class=TT>-1000</span> for the second degrees of freedom (y-traction)
having code <span class=TT>1</span>.
</span>

<p><table align="center" border="2" cellpadding="2" cellspacing="0" >
<tr>
<td align="center" width="35"><a href="eigen.html"><img src="../im/backward.gif" border="0"></a></td>
<td align="center" width="35"><a href="../demos.html"><img src="../im/top.gif" border="0"></a></td>
<td align="center" width="35"><a href="lelas3d.html"><img src="../im/forward.gif" border="0"></a></td>
</tr>
</table>

&nbsp;
<div id="foot_bar">
        Copyright &copy; 1998-2018 Rachid Touzani&nbsp;
</div>

</body>
</html>
